// 配置源
package source

import (
	"errors"
	"time"
)

var (
	//当源观察器已停止时，返回ErrWatcherStopped
	ErrWatcherStopped = errors.New("watcher stopped")
)

// 配置源接口
type Source interface {
	Read() (*ChangeSet, error)
	Write(*ChangeSet) error
	Watch() (Watcher, error)
	String() string
}

// 变更集表示从源中获取的变更集
// 变更集包含数据、校验和、格式、源和时间戳
type ChangeSet struct {
	Data      []byte
	Checksum  string
	Format    string
	Source    string
	Timestamp time.Time
}

// 变更集观察器接口
type Watcher interface {
	Next() (*ChangeSet, error)
	Stop() error
}
